package com.thiswhyme.common.utils.codec;

/**
 * @description: 支持的加密算法
 * @author: thiswhyme
 * @date: 2021/9/13
 */
public enum EncryptAlgorithm {

	/**
	 * 加密算法
	 */
	DES(1, "DES算法"),
	AES(2, "AES算法"),
	MD5(3, "MD5算法"),
	RSA(4, "RSA算法"),
	SHA(5, "SHA算法"),
	SM4(6, "SM4算法");

	/**
	 * 下标值。
	 */
	private Integer index;

	/**
	 * 描述
	 */
	private String desc;

	/**
	 * 构造函数
	 * @param index
	 */
	EncryptAlgorithm(Integer index, String desc) {
		this.index = index;
		this.desc = desc;
	}

	/**
	 * 返回当前枚举的下标。
	 * @return
	 */	
	public Integer index() {
		return index;
	}

	/**
	 * 返回当前枚举的描述。
	 * @return
	 */
	public String desc() {
		return desc;
	}

	/**
	 * 根据枚举的下标获取对应的枚举
	 * @param index 枚举的下标值
	 * @return 根据下标找到的枚举。如果没有匹配的枚举，返回null。
	 */	
	public static EncryptAlgorithm indexOf(int index) {
        for (EncryptAlgorithm item : EncryptAlgorithm.values()) {
            if (item.index == index) {
				return item;
            }
        }

		return null;
	}

	/**
	 * 根据枚举的字面值获取对应的枚举
	 * @param name 枚举的字面值
	 * @return 根据字面值找到的枚举。如果没有匹配的枚举，返回null。
	 */	
	public static EncryptAlgorithm nameOf(String name) {
		for (EncryptAlgorithm item : EncryptAlgorithm.values()) {
			if (item.toString().equals(name)) {
				return item;
			}
		}

		return null;
	}
}
